﻿using System;
using System.Linq;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections.Generic;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Framework.Client;
using Microsoft.LightSwitch.Presentation;
using Microsoft.LightSwitch.Presentation.Extensions;
using System.Windows.Controls;

namespace LightSwitchApplication
{
    public partial class ACQ_OrdiniFornitoreMateriale
    {
        partial void StampaOrdineMaterialeCmd_Execute()
        {
            // Chiedere se emettere ordine e aggiornare stato in materiale ordinato.

            var emetti = this.ShowMessageBox(@"Aggiornare lo stato di avanzamento in "" Materiale Ordinato "" ? ", "Emissione ordine", MessageBoxOption.YesNo);

            if (emetti == System.Windows.MessageBoxResult.OK)
            {
                EmettiOrdine();
            }

            this.Application.ShowRPT_OrdineFornitoreMateriale(OrdiniFornitoreMateriale.SelectedItem.Id);
        }

        partial void EmettiOrdineCmd_Execute()
        {
            var emetti = this.ShowMessageBox(@"Sarà aggiornato lo stato di avanzamento in "" Materiale Ordinato "" .
                                               Procedere ?", "Emissione ordine", MessageBoxOption.YesNo);

            if (emetti == System.Windows.MessageBoxResult.Yes)
            {
                EmettiOrdine();
            }
        }

        /// <summary>
        /// Segna flag emesso dell'ordine selezionato
        /// e setta lo stato di avanzamento in "Materiale Ordinato" dei dettagli ordine interessati
        /// </summary>
        private void EmettiOrdine()
        {
            var ordine = OrdiniFornitoreMateriale.SelectedItem;

            ordine.Emesso = true;

            foreach (var d in ordine.DettagliDocumentoMateriale)
            {
                foreach (var d1 in d.DettagliDocumento)
                {
                    d1.StatoAvanzamento = (int)StatoAvanzamento.MaterialeOrdinato;
                }
            }
        }

        partial void KgToMmConverterCmd_Execute()
        {
            // Write your code here.

        }

        //this has to match the actual name of the grid control (by default it gets called "grid") 
        private const string ITEMS_CONTROL = "detailsGrid";

        //this is somewhere to store a reference to the grid control 
        private DataGrid _itemsControl = null;

        #region  Event Handlers
        partial void ACQ_OrdiniFornitoreMateriale_Created()
        {
            //here we're adding an event handler to get a reference to the grid control, when it becomes available 
            //and we have no way of knowing when that will be 
            this.FindControl(ITEMS_CONTROL).ControlAvailable += DemoItems_ControlAvailable;
        }

        private void DemoItems_ControlAvailable(object send, ControlAvailableEventArgs e)
        {
            //we know that the control is a grid, but we use TryCast, just in case 
            _itemsControl = e.Control as DataGrid;

            //if the cast failed, just leave, there's nothing more we can do here 
            if (_itemsControl == null)
            {
                return;
            }

            //set the property on the grid that allows multiple selection 
            _itemsControl.SelectionMode = DataGridSelectionMode.Extended;
            //   _itemsControl.SelectionChanged += new SelectionChangedEventHandler(ItemsControl_SelectionChanged);
        }

        #endregion

        /// <summary>
        /// Setto il dettaglio documento come arrivato .
        /// Aggiungo quantità a magazzino, solo materiale non tagliato in misura.
        /// Aggiorno articoli in coda con materiale da tagliare o materiale tagliato.
        /// </summary>
        partial void SettaMaterialeArrivato_Execute()
        {
            if (_itemsControl == null) return;

            var itemSelectedCount = _itemsControl.SelectedItems.Count;

            var msg = string.Format(@"Ci sono {0} voci selezionate.
                                      La quantità di materiale ordinata sarà aggiunta al magazzino.
                                      Sarà aggiornato lo stato di avanzamento degli articoli in coda.
                                      Proseguire ?", itemSelectedCount);

            // Write your code here.
            var emetti = this.ShowMessageBox(msg, "Materiale Arrivato", MessageBoxOption.YesNo);

            if (emetti == System.Windows.MessageBoxResult.No) return;

            foreach (DettaglioDocumentoMateriale dettaglio in _itemsControl.SelectedItems)
            {
                var tot = 0.0m;

                dettaglio.Arrivato = true;

                // Aggiungo materiale in magazzino e setto con materiale da tagliare articoli in coda.
                if (!dettaglio.TaglioInMisura)
                {
                    tot = dettaglio.Totale.Value;

                    dettaglio.MaterialeGrezzo.QuantitàMagazzino += tot;

                    foreach (var d in dettaglio.DettagliDocumento)
                    {
                        d.StatoAvanzamento = (int)StatoAvanzamento.MaterialeDaTagliare;
                    }
                }
                else // Non aggiungo materiale in magazzino, e setto articoli come in coda , materiale tagliato.
                {
                    foreach (var d in dettaglio.DettagliDocumento)
                    {
                        d.StatoAvanzamento = (int)StatoAvanzamento.TagliatoInCoda;
                    }
                }
            }

            Save();
        }

     


    }
}
